home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / utilsys / rss14gmd.lha / RSys_1.4gmd / C / Error.c < prev    next >
C/C++ Source or Header  |  1996-05-04  |  3KB  |  149 lines

  1. /*
  2.    ***************************************************************************
  3.    *
  4.    * Datei:
  5.    *      RSysError.c
  6.    *
  7.    * Inhalt:
  8.    *
  9.    *      --- Globale Routinen ---
  10.    *
  11.    *    void ErrorHandleFull ( char *ObjName , enum err_objects errobj , enum err_actions erract , int kill , char *file , char *func , int line );
  12.    *
  13.    *      --- Lokale  Routinen ---
  14.    *
  15.    *
  16.    * Bemerkungen:
  17.    *      Enthält die Fehlerbehandlungsroutinen für RSys. Es werden der
  18.    *      Quelldateiname, die Funktion und die entsprechende
  19.    *      Zeilennummer unterstützt.
  20.    *
  21.    * Erstellungsdatum:
  22.    *      20-Apr-93     Rolf Böhme
  23.    *
  24.    * Änderungen:
  25.    *      20-Apr-93     Rolf Böhme        Erstellung
  26.    *
  27.    ***************************************************************************
  28.  */
  29.  
  30. #include "RSys.h"
  31. #include "protos.h"
  32.  
  33. static char *str_err_objects[] =
  34. {
  35.   "Broker",
  36.   "Ports",
  37.   "Files and Directories",
  38.   "Screens",
  39.   "Windows",
  40.   "Libraries",
  41.   "Devices",
  42.   "Icons",
  43.   "Gadgets",
  44.   "Menus",
  45.   "Environment and Prefs",
  46.   "DOS-ExAll()",
  47.   "Fonts",
  48.   "Lists and Nodes",
  49.   "Memory",
  50.   "Tasks",
  51.   "Clipboard",
  52.   "Own object",
  53.   "Data entry",
  54.   "Object context creation",
  55.   "Miscellaneous"
  56. };
  57.  
  58. static char *str_err_actions[] =
  59. {
  60.   "Duplicate name attempted",
  61.   "Creation failed",
  62.   "Can't find object",
  63.   "Can't kill object",
  64.   "Can't open object",
  65.   "Can't read file",
  66.   "Can't write file",
  67.   "ExAll() failed",
  68.   "Size of object to large",
  69.   "Object not saved",
  70.   "Wrong input or argument given",
  71.   "Can't examine object info",
  72.   "Object does no exist",
  73.   "Object has wrong type",
  74.   "Allocation failed",
  75.   "Can't modify this object",
  76.   "Locking failed"
  77. };
  78.  
  79.  
  80.  /*
  81.   * ErrorHandleFull() gibt im Falle eines Fehlers eine
  82.   * vollständige Beschreibung des Fehlers unter Angabe der
  83.   * Zeilennummer und der Quelldatei sowie der Funktion, in der
  84.   * der Fehler auftrat
  85.   */
  86. void
  87. ErrorHandleFull (char *ObjName, enum err_objects errobj, enum err_actions erract,
  88.          int kill, char *file, char *func, int line)
  89. {
  90.   long ioerr;
  91.   UBYTE header[BUFSIZE], kind[BUFSIZE], iofault[BUFSIZE];
  92.   UBYTE *errfmt = (UBYTE *) "Error object  : %s\n"
  93.   "Error type    : %s\n"
  94.   "Error action  : %s\n"
  95.   "I/O-Error     : %ld (%s)\n"
  96.   "Source file   : %s\n"
  97.   "Function      : %s()\n"
  98.   "Source line   : %ld\n"
  99.   "-- %s";
  100.  
  101.   DPOS;
  102.  
  103.   sprintf ((char *) header, "%s %s message", NAME, (kill ? "Error" : "Info"));
  104.   strcpy ((char *) kind, (kill == KILL) ? "Sorry...this killed the Program!" :
  105.       "Don't worry! The program continues...");
  106.  
  107.   ioerr = IoErr ();
  108.  
  109.   if (!Fault (ioerr, (STRPTR) "is", iofault, (long) (BUFSIZE - 1)))
  110.     strcpy ((char *) iofault, field[NO_FIELD]);
  111.  
  112.   if (ioerr != 0L)
  113.     SetIoErr (0L);
  114.  
  115.   if (IntuitionBase)
  116.     {
  117.       DisplayBeep (NULL);
  118.  
  119.       MyEasyRequest (SysWnd, header,
  120.              (UBYTE *) ((kill == KILL) ? "Kill!" : "Continue"),
  121.              errfmt,
  122.              (UBYTE *) ObjName,
  123.              (UBYTE *) str_err_objects[errobj],
  124.              (UBYTE *) str_err_actions[erract],
  125.              ioerr, iofault,
  126.              (UBYTE *) file,
  127.              (UBYTE *) func,
  128.              line,
  129.              kind);
  130.     }
  131.   else if (NOT (Flags.wb_start))
  132.     {
  133.       strcat ((char *) kind, "\n");
  134.       Printf (errfmt, (ULONG) ObjName,
  135.           str_err_objects[errobj],
  136.           (UBYTE *) str_err_actions[erract],
  137.           ioerr, iofault,
  138.           (UBYTE *) file,
  139.           (UBYTE *) func,
  140.           line,
  141.           kind);
  142.     }
  143.  
  144.   if (kill == KILL)
  145.     CloseAll ();
  146.  
  147.   return;
  148. }
  149.